<?php

class EtapaDaoImpl extends EtapaDao {

    public function encontrarTodosPersonasEtapa(CriterioDeBusqueda $criterioDeBusqueda){
    	$q = $this->crearConsultaPersonaEtapa($criterioDeBusqueda);
    	return $q->execute();
    }

    /**
     * Devuelve todas las personas de una unidad
     *
     *
     */
    public function encontrarTodosSinEtapa(CriterioDeBusqueda $criterioDeBusqueda){
      $q = $this->crearConsultaSinEtapa($criterioDeBusqueda);
      return $q->execute();
    }

	public function encontrarTodosVivencias(PersonaEtapa $personaEtapa,Vivencia $vivencia){
         $data = array();
         switch(get_class($vivencia)){
             case 'VivenciaColectiva':
                $data = $this->encontrarTodosVivenciasColectivas($personaEtapa);
             	break;
         }
         return $data;
   	}

   	protected function encontrarTodosVivenciasColectivas(PersonaEtapa $personaEtapa){
   		$data = array();
        //Necesito encontrar los objetivos de la persona en esta etapa
        $criterioDeBusqueda = new CriterioDeBusqueda();
        $criterioDeBusqueda->agregar('ObjetivoEducativo.Edad.id',$personaEtapa->getEtapa()->getEdad()->getId());
        $criterioDeBusqueda->agregar('Edad.Etapas.id',$personaEtapa->getEtapa()->getId());
        $criterioDeBusqueda->agregar('ActividadObjetivo.Actividad.Unidad.id',$personaEtapa->getUnidad()->getId());
        $criterioDeBusqueda->agregarUnico('ObjetivoEducativo.id');
        $objetivos = $this->encontrarTodosObjetivos($criterioDeBusqueda,$personaEtapa);
        $criterioDeBusqueda = null;

		foreach ($objetivos as $objetivo){
                     $vivencia = new VivenciaColectiva();
                     $vivencia->setObjetivoEducativo($objetivo);
                     $data[] = $vivencia;
		}               

   		return $data;
   	}

   	public function encontrarTodosObjetivos(CriterioDeBusqueda $criterioDeBusqueda,PersonaEtapa $personaEtapa){
    	$q = $this->crearConsultaObjetivos($criterioDeBusqueda);
    	$q->innerJoin('ObjetivoEducativo.ActividadObjetivo');
    	$q->orderBy('ObjetivoEducativo.area_de_desarrollo_id ASC, ObjetivoEducativo.numero ASC');
    	$fechaDeTermino = ($personaEtapa->getFechaTermino() == '0000-00-00 00:00:00') ? date('Y-m-d') : $personaEtapa->getFechaTermino();
        $fechaDeTermino = (strlen($fechaDeTermino) > 4) ? $fechaDeTermino : date('Y-m-d') ;
        $q->addWhere("Actividad.fecha BETWEEN '".$personaEtapa->getFechaInicio()."' AND '".$fechaDeTermino."'");
        $q->addWhere("Actividad.fecha IN (SELECT Asistencia.fecha FROM Asistencia WHERE Asistencia.UnidadPersona.Persona.id = ? )",$personaEtapa->getPersona()->getId());
        return $q->execute();
    }



}
?>
